package com.example.java17;

public class TestSealed {


    public static void main(String[] args){



    }


    /***
     * 声明一个密封类，并只允许 Rezi 类继承
     */
    public static sealed class Baba permits Rezi {}

    /**
     * 声明一个儿子类,继承Baba，并只允许 DaSunzi, XiaoSunzi 类继承
     * 注意：子类必须是(final, sealed, no-sealed)其中的一种
     */
    public sealed static class Rezi extends Baba permits DaSunzi, XiaoSunzi{}

    /**
     * 声明孙子类继承儿子,使用final修饰
     */
    public final static class DaSunzi extends Rezi {}

    /**
     * 声明孙子类继承儿子,使用non-sealed修饰
     * non-sealed修饰类就是普通类，没有密封类的特性，可以被其它类继承
     */
    public static non-sealed class XiaoSunzi extends Rezi {}

    /**
     * 声明一个从孙子继承小孙子
     * 这里就是普通继承了
     */
    public static class CongSunzi extends XiaoSunzi {}
}
